package it.unisa.unibox.gestioneProdotti;


import it.unisa.unibox.beans.Brevetto;
import it.unisa.unibox.beans.Ricercatore;
import it.unisa.unibox.commons.DBConstants;
import it.unisa.unibox.commons.DBNames;
import it.unisa.unibox.facade.FacadeProdotti;
import it.unisa.unibox.facade.IFacadeProdotti;
import it.unisa.unibox.otherServlets.UtilityFunctions;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
public class ModificaBrevettoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public static ServletContext servletContext;


	private String filePath;


	public static IFacadeProdotti facade;


	public ModificaBrevettoServlet() {
		super();
	}

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		try {
			super.init(config);			
			servletContext = getServletConfig().getServletContext();
			filePath = servletContext.getRealPath("files");
			facade = new FacadeProdotti();

		} 

		catch (Exception e) {
			e.printStackTrace();
		}
	}


	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		doPost(request,response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("text/html");
		response.setHeader("Cache-Control",	"no-store, no-cache, must-revalidate");
		PrintWriter out = response.getWriter();

		String risp="";

		Brevetto prodotto = creaBean(request);

		if(prodotto!=null){

			if(facade.checkConflitto(Integer.parseInt(request.getParameter(DBNames.ATT_PRODOTTO_ID)),
					request.getParameter(DBNames.ATT_PRODOTTO_TITOLO), 
					request.getParameter(DBNames.ATT_PRODOTTO_TIPOLOGIA), 
					Integer.parseInt(request.getParameter(DBNames.ATT_PRODOTTO_ANNO)),
					request.getParameter(DBNames.ATT_PRODOTTO_URL))){

				risp="conflitto";
				System.out.println("conflitto trovato");
			}
			else{
				risp="ok";
			}

			if(facade.modificaProdotto(prodotto)){	

				String autori = request.getParameter("autori");

				ArrayList<Integer> lista = UtilityFunctions.mySplit(autori);

				Ricercatore rc = (Ricercatore) request.getSession().getAttribute("ricercatore");

				if(facade.aggiornaListaAutori(prodotto.getId(), lista, rc.getId())){

					out.write(risp);
				}
			}
			else
				out.write("no");
		}

	}

	protected Brevetto creaBean(HttpServletRequest request){


		Brevetto p = null;

		int id = Integer.parseInt(request.getParameter("id"));
		String titolo = request.getParameter(DBNames.ATT_PRODOTTO_TITOLO);
		String abstract_field = request.getParameter("abstract_field");
		int anno = 	Integer.parseInt(request.getParameter(DBNames.ATT_PRODOTTO_ANNO));
		String lingua = request.getParameter(DBNames.ATT_PRODOTTO_LINGUA);  
		String url = request.getParameter(DBNames.ATT_PRODOTTO_URL); 
		String note = ""; 


		String tipologia = request.getParameter(DBNames.ATT_PRODOTTO_TIPOLOGIA);
		int stato = request.getParameter(DBNames.ATT_PRODOTTO_STATO)==null ? DBConstants.PRODOTTO_STATO_DRAFT : DBConstants.PRODOTTO_STATO_COMPLETO;
		int pubblico = request.getParameter(DBNames.ATT_PRODOTTO_PUBBLICO).equalsIgnoreCase("si") ? DBConstants.PRODOTTO_DOMINIO_PUBBLICO : DBConstants.PRODOTTO_DOMINIO_PRIVATO;
		System.out.println("->>>> "+request.getParameter(DBNames.ATT_PRODOTTO_ANNO));

		String estensione = request.getParameter("estensione");  
		String durata = request.getParameter("durata"); 


		if(!UtilityFunctions.controllaCampi(titolo, abstract_field, anno, lingua, url) 
				|| !controllaCampiBrevetto(durata, estensione))
			return p;
		else
			p = new Brevetto(id,(Ricercatore) request.getSession().getAttribute("ricercatore"),
					tipologia,
					titolo, 
					abstract_field,
					stato,
					pubblico,
					anno,
					lingua,
					url,
					note,
					Integer.parseInt(durata),
					estensione); 

		System.out.println(p);

		return p;
	}


	private static boolean controllaCampiBrevetto(String durata, String estensione){
		try{
			int dur = Integer.parseInt(durata);
		}catch(NumberFormatException e){
			System.out.println("Errore durata");
			return false;
		}
		
		if(Integer.parseInt(durata) < 0 || Integer.parseInt(durata) > 9999  || durata.equals("")
			 || estensione.length() < 1 || estensione.length() > 20 || estensione.equals("") )
			return false;
		
		return true;
	}
}
